<template>
	<view class="viewport">
		<!-- 地址列表 -->
		<scroll-view class="scroll-view" scroll-y>
			<view v-if="addressList.length" class="address">
				<uni-swipe-action class="address-list">
					<!-- 收货地址项 -->
					<uni-swipe-action-item class="item" v-for="v in addressList" :key="v.id">
						<view class="item-content" @tap="onChangeAddress(v)">
							<view class="user">
								{{v.name}}
								<text class="contact">{{v.phone}}</text>
								<text v-if="v.isDefault" class="badge">默认</text>
							</view>
							<view class="locate">{{v.fullLocation}}{{v.fullAddress}}</view>
							<navigator class="edit" hover-class="none"
								:url="`/pagesMember/address-form/address-form?id=${v.id}`" @tap.stop="()=>{}">
								修改
							</navigator>
						</view>
						<template #right>
							<button @tap="delAddress(v.id)" class="delete-button">删除</button>
						</template>
					</uni-swipe-action-item>
				</uni-swipe-action>
			</view>
			<view v-else class="blank">暂无收货地址</view>
		</scroll-view>
		<!-- 添加按钮 -->
		<view class="add-btn">
			<navigator hover-class="none" url="/pagesMember/address-form/address-form">
				新建地址
			</navigator>
		</view>
	</view>
</template>
<script setup lang="ts">
	import { useMemberStore } from '@/store/modules/member.ts'
	import {useAddressStore} from '@/store/modules/address.ts'
	import { getMemberAddressListApi, delAddressApi } from '@/api/address/index.ts'
	import { onShow } from '@dcloudio/uni-app';
	import { reactive, toRefs, ref } from 'vue';
	import type { MemberAddress, AddressQuery } from '@/api/address/types';


	const addressList = ref<MemberAddress[]>([])
	const memberStore = useMemberStore();
	const data = reactive<AddressQuery>({
		queryParams: {
			pageNum: 1,
			pageSize: 10,
			userId: memberStore.user.userId
		}
	})
	const { queryParams } = toRefs(data)

	/* 获取收货地址 */
	const getMemberAddressList = async () => {
		const res = await getMemberAddressListApi(queryParams.value)
		addressList.value = res.rows;
	}
	/* 删除收货地址 */
	const delAddress = (id: string | number)=>{
		uni.showModal({
			content:'确定要删除？',
			success:async(res)=> {
				if(res.confirm){
					const {code} = await delAddressApi(id)
					if(code===200){
						uni.showToast({
							icon: 'success',
							title: '删除成功'
						})
						//重新获取数据列表
						getMemberAddressList();
					}
				}
			}
		})	
	}
	/* 修改收货地址 */
	const onChangeAddress = (item:MemberAddress)=>{
		const addressStore = useAddressStore()
		addressStore.changeSelectedAddress(item)
		console.log(addressStore.changeSelectedAddress(item))
		uni.navigateBack()
	}
	//每次页面打开时就执行
	onShow(() => {
		getMemberAddressList();
	})
</script>

<style lang="scss">
	page {
		height: 100%;
		overflow: hidden;
	}

	/* 删除按钮 */
	.delete-button {
		display: flex;
		justify-content: center;
		align-items: center;
		width: 50px;
		height: 100%;
		font-size: 28rpx;
		color: #fff;
		border-radius: 0;
		padding: 0;
		background-color: #cf4444;
	}

	.viewport {
		display: flex;
		flex-direction: column;
		height: 100%;
		background-color: #f4f4f4;

		.scroll-view {
			padding-top: 20rpx;
		}
	}

	.address {
		padding: 0 20rpx;
		margin: 0 20rpx;
		border-radius: 10rpx;
		background-color: #fff;

		.item-content {
			line-height: 1;
			padding: 40rpx 10rpx 38rpx;
			border-bottom: 1rpx solid #ddd;
			position: relative;

			.edit {
				position: absolute;
				top: 36rpx;
				right: 30rpx;
				padding: 2rpx 0 2rpx 20rpx;
				border-left: 1rpx solid #666;
				font-size: 26rpx;
				color: #666;
				line-height: 1;
			}
		}

		.item:last-child .item-content {
			border: none;
		}

		.user {
			font-size: 28rpx;
			margin-bottom: 20rpx;
			color: #333;

			.contact {
				color: #666;
			}

			.badge {
				display: inline-block;
				padding: 4rpx 10rpx 2rpx 14rpx;
				margin: 2rpx 0 0 10rpx;
				font-size: 26rpx;
				color: #27ba9b;
				border-radius: 6rpx;
				border: 1rpx solid #27ba9b;
			}
		}

		.locate {
			line-height: 1.6;
			font-size: 26rpx;
			color: #333;
		}
	}

	.blank {
		margin-top: 300rpx;
		text-align: center;
		font-size: 32rpx;
		color: #888;
	}

	.add-btn {
		height: 80rpx;
		text-align: center;
		line-height: 80rpx;
		margin: 30rpx 20rpx;
		color: #fff;
		border-radius: 80rpx;
		font-size: 30rpx;
		background-color: #27ba9b;
	}
</style>